ZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IGNjMTNhN2YuLmQ3MDk4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtNDMsNyArNDMsOCBAQAogCSAgc2VkMTM4MDYubyBzZWQxNTZ4Lm8gXAogCSAgc2VyaWFsLm8gc2VyaWFsX21heDMxMDAubyBcCiAJICBzZXJpYWxfcGwwMTAubyBzZXJpYWxfcGwwMTEubyBzZXJpYWxfeHVhcnRsaXRlLm8gXAotCSAgc2w4MTFfdXNiLm8gc21jOTExMTEubyBzbWlMeW54RU0ubyBzdGF0dXNfbGVkLm8gc3ltNTNjOHh4Lm8gXAorCSAgc2w4MTFfdXNiLm8gc201MDEubyBzbWM5MTExMS5vIHNtaUx5bnhFTS5vIFwKKwkgIHN0YXR1c19sZWQubyBzeW01M2M4eHgubyBcCiAJICB0aV9wY2kxNDEwYS5vIHRpZ29uMy5vIFwKIAkgIHVzYmRjb3JlLm8gdXNiZGNvcmVfZXAwLm8gdXNiZGNvcmVfb21hcDE1MTAubyB1c2J0dHkubyBcCiAJICB2aWRlb21vZGVzLm8gdzgzYzU1M2YubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbTUwMS5jIGIvZHJpdmVycy9zbTUwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGIwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NtNTAxLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN05HVibGkgRmF2ZXJnZXMgLSA8d3d3LnN0YXVibGkuY29tPgorICogUGllcnJlIEFVQkVSVCAgcC5hdWJlcnRAc3RhdWJsaS5jb20KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDUKKyAqIE1hcnRpbiBLcmF1c2UgVFEtU3lzdGVtcyBHbWJIIG1hcnRpbi5rcmF1c2VAdHFzLmRlCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIEJhc2ljIHZpZGVvIHN1cHBvcnQgZm9yIFNNSSBTTTUwMSAiVm95YWdlciIgZ3JhcGhpYyBjb250cm9sbGVyCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaWZkZWYgQ09ORklHX1ZJREVPX1NNNTAxCisKKyNpbmNsdWRlIDx2aWRlb19mYi5oPgorI2luY2x1ZGUgPHNtNTAxLmg+CisKKyNkZWZpbmUgcmVhZDgocHRyUmVnKSAgICAgICAgICAgICAgICBcCisgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHNtNTAxLmlzYUJhc2UgKyBwdHJSZWcpCisKKyNkZWZpbmUgd3JpdGU4KHB0clJlZyx2YWx1ZSkgXAorICAgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShzbTUwMS5pc2FCYXNlICsgcHRyUmVnKSA9IHZhbHVlCisKKyNkZWZpbmUgcmVhZDE2KHB0clJlZykgXAorICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHNtNTAxLmlzYUJhc2UgKyBwdHJSZWcpKQorCisjZGVmaW5lIHdyaXRlMTYocHRyUmVnLHZhbHVlKSBcCisgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoc201MDEuaXNhQmFzZSArIHB0clJlZykgPSB2YWx1ZSkKKworI2RlZmluZSByZWFkMzIocHRyUmVnKSBcCisgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHNtNTAxLmlzYUJhc2UgKyBwdHJSZWcpKQorCisjZGVmaW5lIHdyaXRlMzIocHRyUmVnLCB2YWx1ZSkgXAorICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShzbTUwMS5pc2FCYXNlICsgcHRyUmVnKSA9IHZhbHVlKQorCitHcmFwaGljRGV2aWNlIHNtNTAxOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTbWlTZXRSZWdzIC0tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIFNtaVNldFJlZ3MgKHZvaWQpCit7CisJLyoKKwkgKiBUaGUgY29udGVudCBvZiB0aGUgY2hpcHNldCByZWdpc3RlciBkZXBlbmRzIG9uIHRoZSBib2FyZCAoY2xvY2tzLAorCSAqIC4uLikKKwkgKi8KKwljb25zdCBTTUlfUkVHUyAqcHJlZyA9IGJvYXJkX2dldF9yZWdzICgpOworCXdoaWxlIChwcmVnLT5JbmRleCkgeworCQl3cml0ZTMyIChwcmVnLT5JbmRleCwgcHJlZy0+VmFsdWUpOworCQkvKgorCQkgKiBJbnNlcnQgYSBkZWxheSBiZXR3ZWVuCisJCSAqLworCQl1ZGVsYXkgKDEwMDApOworCQlwcmVnICsrOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogdmlkZW9faHdfaW5pdCAtLQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkICp2aWRlb19od19pbml0ICh2b2lkKQoreworCXVuc2lnbmVkIGludCAqdm0sIGk7CisKKwltZW1zZXQgKCZzbTUwMSwgMCwgc2l6ZW9mIChHcmFwaGljRGV2aWNlKSk7CisKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBhY2Nlc3MgdG8gdGhlIGdyYXBoaWMgY2hpcHNldCBSZXRyZWl2ZSBiYXNlCisJICogYWRkcmVzcyBvZiB0aGUgY2hpcHNldCAoc2VlIGJvYXJkL1JQWENsYXNzaWMvZWNjeC5jKQorCSAqLworCWlmICgoc201MDEuaXNhQmFzZSA9IGJvYXJkX3ZpZGVvX2luaXQgKCkpID09IDApIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoKHNtNTAxLmZyYW1lQWRycyA9IGJvYXJkX3ZpZGVvX2dldF9mYiAoKSkgPT0gMCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCXNtNTAxLndpblNpemVYID0gYm9hcmRfZ2V0X3dpZHRoICgpOworCXNtNTAxLndpblNpemVZID0gYm9hcmRfZ2V0X2hlaWdodCAoKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1NNNTAxXzhCUFApCisJc201MDEuZ2RmSW5kZXggPSBHREZfXzhCSVRfSU5ERVg7CisJc201MDEuZ2RmQnl0ZXNQUCA9IDE7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1ZJREVPX1NNNTAxXzE2QlBQKQorCXNtNTAxLmdkZkluZGV4ID0gR0RGXzE2QklUXzU2NVJHQjsKKwlzbTUwMS5nZGZCeXRlc1BQID0gMjsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfVklERU9fU001MDFfMzJCUFApCisJc201MDEuZ2RmSW5kZXggPSBHREZfMzJCSVRfWDg4OFJHQjsKKwlzbTUwMS5nZGZCeXRlc1BQID0gNDsKKyNlbHNlCisjZXJyb3IgVW5zdXBwb3J0ZWQgU001MDEgQlBQCisjZW5kaWYKKworCXNtNTAxLm1lbVNpemUgPSBzbTUwMS53aW5TaXplWCAqIHNtNTAxLndpblNpemVZICogc201MDEuZ2RmQnl0ZXNQUDsKKworCS8qIExvYWQgU21pIHJlZ2lzdGVycyAqLworCVNtaVNldFJlZ3MgKCk7CisKKwkvKiAoc2VlIGJvYXJkL1JQWENsYXNzaWMvUlBYQ2xhc3NpYy5jKSAqLworCWJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAoc201MDEuaXNhQmFzZSk7CisKKwkvKiBDbGVhciB2aWRlbyBtZW1vcnkgKi8KKwlpID0gc201MDEubWVtU2l6ZS80OworCXZtID0gKHVuc2lnbmVkIGludCAqKXNtNTAxLmZyYW1lQWRyczsKKwl3aGlsZShpLS0pCisJCSp2bSsrID0gMDsKKworCXJldHVybiAoJnNtNTAxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogdmlkZW9fc2V0X2x1dCAtLQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIHZpZGVvX3NldF9sdXQgKAorCXVuc2lnbmVkIGludCBpbmRleCwgICAgICAgICAgIC8qIGNvbG9yIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgciwgICAgICAgICAgICAgIC8qIHJlZCAqLworCXVuc2lnbmVkIGNoYXIgZywgICAgICAgICAgICAgIC8qIGdyZWVuICovCisJdW5zaWduZWQgY2hhciBiICAgICAgICAgICAgICAgLyogYmx1ZSAqLworCSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19WSURFT19TTTUwMSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbTUwMS5oIGIvZHJpdmVycy9zbTUwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjI2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NtNTAxLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3TkdWJsaSBGYXZlcmdlcyAtIDx3d3cuc3RhdWJsaS5jb20+CisgKiBQaWVycmUgQVVCRVJUICBwLmF1YmVydEBzdGF1YmxpLmNvbQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNQorICogTWFydGluIEtyYXVzZSBUUS1TeXN0ZW1zIEdtYkggbWFydGluLmtyYXVzZUB0cXMuZGUKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogQmFzaWMgdmlkZW8gc3VwcG9ydCBmb3IgU01JIFNNNTAxICJWb3lhZ2VyIiBncmFwaGljIGNvbnRyb2xsZXIKKyAqLworCisjaWZuZGVmIF9TTTUwMV9IXworI2RlZmluZSBfU001MDFfSF8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBJbmRleDsKKwl1bnNpZ25lZCBpbnQgVmFsdWU7Cit9IFNNSV9SRUdTOworCisvKiBCb2FyZCBzcGVjaWZpYyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit1bnNpZ25lZCBpbnQgYm9hcmRfdmlkZW9faW5pdCAodm9pZCk7Cit2b2lkIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAodW5zaWduZWQgaW50IGJhc2UpOworY29uc3QgU01JX1JFR1MgKmJvYXJkX2dldF9yZWdzICh2b2lkKTsKK2ludCBib2FyZF9nZXRfd2lkdGggKHZvaWQpOworaW50IGJvYXJkX2dldF9oZWlnaHQgKHZvaWQpOwordW5zaWduZWQgaW50IGJvYXJkX3ZpZGVvX2dldF9mYiAodm9pZCk7CisKKyNlbmRpZiAvKiBfU001MDFfSF8gKi8K